=========================================================================
ISTRUZIONI e SPECIFICHE per mymake
========================================================================

La directory MYMAKE comprende i seguenti file

$$ ls MYMAKE/

gruppo-check.pl   README-2a
gruppo.txt        makeprova.make
Makefile	  testmymake
out.check	  err.check



-----------------------------------------------
Descrizione dei file contenuti nel kit
-----------------------------------------------

README-2a		: questo file


gruppo-check.pl		: uno script Perl che controlla il formato del file
			  gruppo.txt prima di effettuare la consegna
			  (NON MODIFICARE -- uguale al primo frammento)

gruppo.txt		: un file di esempio di specifica del gruppo
			  (uguale al primo frammento)
			  (solo 1 studente per gruppo)
			  (deve essere aggiornato con i dati di chi consegna,
			  secondo il formato esemplificato)

Makefile		: makefile per il test finale del frammento e la
			  consegna  
			  (NON MODIFICARE se non nelle parti richieste)


makeprova.make		:  un makefile di test secondo il formato semplificato
			  "mymakefile" specificato sotto (NON MODIFICARE)

testmymake 	        : script di test per mymake con relativi output 
err.check, out.check	attesi su STDOUT (out.check) ed STDERR (err.check)



------------------------------------------------
Cosa deve essere realizzato per "mymake"
------------------------------------------------

Questo esercizio prevede la realizzazione di una funzione bash (mymake) che
implementa un "make" estremamente semplificato.

mymake interpreta regole della forma

target : source1 .. sourceN
       comando1
       comando2
       ...

Ad esempio (dal file makeprova.make):

a : c b s t
        echo eseguo a!
        echo gigi
	touch a


Ogni comando e' preceduto da un singolo TAB, come avviene nei normali
makefile, e fra una regola e la successiva c'e' ESATTAMENTE una riga vuota
(contenente solo il newline).

mymake puo' essere attivato in due modalita':

bash:~$ mymake

senza argomenti esegue tutte le regole che si trovano nel file "mymakefile"
(se esiste ed e' leggibile)
oppure

bash:~$ mymake -f file

che esegue tutte le regole che si trovano nel file ''file'' 
(se esiste ed e' leggibile)

Le regole vengono eseguite una dopo l'altra nell'ordine in cui compaiono nel
file.


Per ogni regola si esegue la lista di comandi "comando1, comando2 ..." soltanto
se il TARGET non esiste oppure se la data dell'ultima modifica di almeno
uno dei SOURCE e' successiva alla data di ultima modifica del TARGET.

Se tutti i SOURCE esistono ed hanno data di modifica antecedente al TARGET i
comandi non vengono eseguiti. Se un SOURCE non esiste la dipendenza e' sempre
verificata (a differenza di cio' che accade nel make vero!).

----------------------------------------------------------------------------
Apertura, chiusura e lettura di file in BASH
----------------------------------------------------------------------------
L'apertura e la chiusura di un file puo' essere effettuata in bash attreverso
la 'exec' in particolare:

   exec n< file_name    

apre il file file_name in lettura e gli assegna il file descriptor 'n' 

   exec n> file_name

apre il file file_name in scrittura (file descriptor n)

   exec n<> file_name

apre in lettura e scrittura. Invece per chiudere il file descriptor n

   exec n>&-

Dopo aver aperto il file \`e possibile leggerlo utilizzando il comando 'read'
con opzione -u numero_descrittore.

------------------
Come procedere :
-----------------

0) leggere attentamente questo README 

1) analizzare accuratamente lo script ./testmymake e
   l'ouput atteso su stdout (file out.check) ed stderr (file err.check)

2) implementare la funzione richiesta in un file './mymake'
   ed testando incrementalmente il codice prodotto

3) testare la funzione con il nostro script eseguendo

       bash:~$ make test

  NOTA: (1) tutti i file sviluppati per la soluzione si devono trovare nella
  directory MYMAKE/
  (2) E' importante che il test venga effettuato solo su
  una funzione gia' ragionevolemnte corretta 
  altrimenti i risultati possono essere di
  difficile interpretazione, fuorvianti o inutili.

4) preparare la documentazione: ovvero commentare adeguatamente il file che
   contiene la soluzione aggiungendo la dichiarazione di originalita'

   # file: mymake
   #    \author Nino Bixio
   #  Si dichiara che il contenuto di questo file e' in ogni sua parte opera
   #  originale dell' autore.  

5) aggiornare il file "gruppo.txt" con nome e dati

6) consegnare il file ESCLUSIVAMENTE eseguendo

      bash:~$ make consegna

   e seguendo le istruzioni. 
   Per la consegna e' necessaria l'utility "mpack" installata solo nelle
   macchine dei laboratori H, M ed I. Per consegne da altre macchine e'
   possibile scaricare il binario di 'mpack' dal sito del corso (attenzione:
   richiede che il mailer sia configurato correttamente).


---------------------------------------
 NOTE IMPORTANTI: LEGGERE ATTENTAMENTE
---------------------------------------

1) gli eleborati non consegnati con "make consegna" non verranno accettati

2) tutti gli elaborati verranno confrontati fra di loro con tool automatici
   per stabilire eventali situazioni di PLAGIO. Se tali situazioni si
   verificheranno *tutti* gli elaborato coinvolti verranno annullati con
   conseguente perdita del bonus. 

3) Tutti gli studenti coinvolti in un episodio di PLAGIO comprovato dovranno
   re-implementare il frammento incriminato e saranno sottoposti ad una prova
   orale supplementare. In caso di recidive verranno esclusi dalla
   possibilita' di sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO
   IN CORSO.

4) Chi in sede di orale risulta palesemente non essere l'autore del software
   consegnato in uno dei frammenti verra' escluso dalla possibilita' di
   sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO IN CORSO.

5) Tutti i comportamenti scorretti ai punti 3 e 4 verranno segnalati
   ufficialmente al presidente del corso di laurea, che si riserva di
   decidere azioni disciplinari supplementari a quelle sopra descritte.

----------------------------
 VALUTAZIONE DELL'ESERCIZIO:
----------------------------

Gli studenti che consegnano una versione funzionante e ragionevolmente
corretta di entrambi gli esercizi 
entro la data di scadenza accumulano un bonus di 2
punti che verra' sommato al voto finale (vedi lucidi lezioni ed
esercitazioni).

La qualita' del codice consegnato per i due esercizi verra' valutata come
parte del progetto finale e contribuira' alla votazione assegnata al progetto.
Eventuali caratteristiche in piu' rispetto a quelle strettamente richieste
dalle specifiche date verranno valutate in questa sede.
